#include <func.h>

#define num 1000000
int main()
{
    //共享内存的创建和连接
    int shmid;
    shmid=shmget(1000,4096,IPC_CREAT|0600);
    ERROR_CHECK(shmid,-1,"shmget");
    printf("shmid=%d\n",shmid);
    int* p=shmat(shmid,NULL,0);
    ERROR_CHECK(p,(char*)-1,"shmat")
    int i;
    p[0]=0;
    //信号量的创建及初始化
    int sem_id=semget(1000,1,IPC_CREAT|0600);//给读写权限
    ERROR_CHECK(sem_id,-1,"semget")
    int ret=semctl(sem_id,0,SETVAL,1);
    ERROR_CHECK(ret,-1,"semctl")
    struct sembuf sopp,sopv;
    sopp.sem_num=0;//操作的信号量的下标
    sopp.sem_op=-1;//p操作
    sopp.sem_flg=0;
    sopv.sem_num=0;//操作的信号量的下标
    sopv.sem_op=1;//v操作
    sopv.sem_flg=0;
    if(!fork())
    {
        for(i=0;i<num;i++)
        {
            semop(sem_id,&sopp,1);
            p[0]++;
            semop(sem_id,&sopv,1);
        }
        return 0;
    }else{
        for(i=0;i<num;i++)
        {
            semop(sem_id,&sopp,1);
            p[0]++;
            semop(sem_id,&sopv,1);
        }
        wait(NULL);
        printf("p[0]=%d\n",p[0]);
        return 0;
    }
}